草庐IT

ios - RubyMotion 和指针

全部标签

指针函数/const 指针函数的 C++ 模板部分特化没有区别吗?

让我们考虑以下代码:templateclassFoo{};templateclassFoo{};templateclassFoo{};当我尝试编译它时(ideone)它没有告诉我这两个模板特化是相同的。这是令人惊讶的,因为通常U*和U*const是不同的东西(第二个是const指针)。这里有什么问题吗? 最佳答案 在确定函数的类型(通俗地称为其签名)时,将删除顶级cv限定符。§8.3.5/5...Thetypeofafunctionisdeterminedusingthefollowingrules....Afterproducin

c++ - C++中的结构指针

为了完成我的作业,我不得不用C++实现一个列表,因此我定义了一个结构:structNode{intvalue;Node*next;Node*operator[](intindex)//togettheindexednodelikeinanarray{Node*current=this;for(inti=0;inext;}returncurrent;}};当我将它用于实际结构时,它运行良好:Nodev1,v2,v3;v1.next=&v2;v2.next=&v3;v3.value=4;v3.next=NULL;coutvaluevaluevaluevalue但是当我尝试将它与指针一起使用

c++ - 从智能指针获取原始指针

如果这是重复的,我们深表歉意。希望不是。我搜索了一长串问题,但他们似乎都没有真正解释它。这里是:在下面intmain(int,char**){autoa=make_unique("HelloWorld");//dostuffwitheither&*aora.get()return0;}&*a和a.get()有区别吗?我知道它们都返回原始指针值(除非operator&被重载),但是选择一个比另一个有任何运行时优势吗? 最佳答案 &*a如果指针为nullptr,则为未定义行为。您可以了解有关未定义行为的更多信息here.在所有其他情况下

c++ - 值超过指向 C 样式字符串的有效指针

我目前正在学习“C++入门”。其中一个练习问题是:下面的程序是做什么的?constcharca[]={'h','e','l','l','o'};constchar*cp=ca;while(*cp){cout我很高兴我了解到*cp将在ca[]数组的最后一个字符之后继续为真,因为数组中的最后一项没有空字符。更多的是出于我自己的好奇心,是什么让while循环变成了false。它似乎总是在我的电脑上显示19个字符。0-4是hello字符串,5-11始终相同,每次执行时12-19会发生变化。#includeusingnamespacestd;intmain(){constcharca[]={'h

c++ - 传递返回多态 unique_ptr 的 lambda 作为函数指针

我想传递一个非捕获的lambda,它返回一个std::unique_ptr,作为std::unique_ptr(*)()类型的函数指针.但是,这仅在我将lambda的返回类型明确声明为std::unique_ptr时才有效。.为什么要明确说明返回类型?为什么它适用于std::function没有这个额外的返回类型?#include#includestructBase{virtual~Base()=default;};structDerived:Base{};structFailsForF2{usingFunction=std::add_pointer_t()>;FailsForF2(F

c# - 我的 C++ 和 C# 互操作在 64 位中崩溃,为什么?指针大小?

我有一个native32位dll(无源代码),它在我使用的应用程序中作为插件运行。我自己做了另一个nativedll,它将与该插件通信以创建和更新插件的控件。我从那个dll导出了我需要的功能,以便从我的c#应用程序(使用p/invoke)控制插件。代码如下:h文件:#pragmaonce#include"include\SpoutControls.h"extern"C"{__declspec(dllexport)voidInitializeControls(char*sendername,int*numControls,char**names,int*types,float*float

c++ - 在 C++ 中使用 decltype 声明指向方法的指针

clang和gcc之间有一些区别。其中之一是他们如何处理指向方法的指针。给定以下代码:templatevoidstore_method(T_Class*object,T_Ret(T_Class::*method)(Args...args));classSomeObjectWithPotentiallyLongName{intcommonly_used_method(intvar);voidregister_method(){/*Thecodebelowisokayforgccwith-std=gnu++11.Butclang*says:*'referencetonon-staticme

c++ - 为什么指向函数的指针不能绑定(bind)到左值引用,而函数可以?

使用带和不带符号的函数名有什么区别?我注意到它们在绑定(bind)到模板参数时以不同的方式表现:voidfoo();templatevoidbind(F&);bind(foo);//OKbind(&foo);//Error为什么会这样?这些情况下的推导类型是什么? 最佳答案 注意内置的operator&将返回T*类型的prvalue。所以&foo将返回一个类型为void(*)()的函数指针,它是一个纯右值,不能绑定(bind)到非常量的左值引用;这正是bind()期望的参数,然后它失败了。对于bind(foo),templatepa

c++ - void指针函数的输出

我发现了一个旧的C++DLL,我想在我的一个项目中使用它,在VS2015中。问题是,它无法编译。我与团队中最初编写代码的人取得了联系,他确信使用VS2010编译的代码完全相同。我在一个非常简单的函数中出错了:标题摘录:/*Datainput*/istream*input;//Sourceofdatalonginputpos;//Currentpositioninthedatastream以及代码本身://Helperfunctiontoincrementacounterwhilereadingacharactervoid*Calculator::inputstream_get(char

c++ - 在 std::cout 中递增变量时指针不显示更新值

这个问题在这里已经有了答案:Orderofevaluationofargumentsusingstd::cout(5个答案)Strangeoutput,notasexpected(2个答案)Undefinedbehaviorandsequencepoints(5个答案)关闭5年前。#include#includeusingnamespacestd;intmain(){inta=5;int&b=a;int*c=&a;cout输出:案例1:ais5.bis5.cis5.ais10.bis10.cis10.案例2:ais5.bis5.cis5.ais11.bis11.cis10.案例3:ai